-- 背包模块
local ConfigLoader = require("config.loader")
local Settings = require("config.settings")
local config = ConfigLoader.load(Settings.CURRENT_GAME)
local logger = require "utils.logger"
local stateManager = require "utils.state_manager"
local tslib = require "TSLib"


local Inventory = {}


-- 检查是否需要管理背包
function Inventory.shouldManageInventory()
    -- 检查背包是否已满
    local x, y = findMultiColorInRegionFuzzy(
        0xffffff,
        "6|-1|0xced5df,10|-1|0xfefefe,27|-2|0xdae0e7,39|-3|0x000000,42|-3|0xffffff",
        config.COMBAT.DETECTION_THRESHOLD,
        0, 0, config.SCREEN_WIDTH, config.SCREEN_HEIGHT,
        { orient = 2 }
    )

    return x ~= -1
end

-- 管理背包
function Inventory.manageInventory()
    logger.info("开始管理背包")

    -- 打开背包
    Inventory.openBag()

    -- 整理背包
    Inventory.sortBag()

    -- 回收装备
    Inventory.recycleEquipment()

    -- 关闭背包
    Inventory.closeBag()

    logger.info("背包管理完成")
end

-- 打开背包
function Inventory.openBag()
    logger.info("打开背包")
    tap(config.INVENTORY.BAG_OPEN_COORDS[1], config.INVENTORY.BAG_OPEN_COORDS[2])
    mSleep(config.INVENTORY.BAG_OPEN_COORDS[3])
end

-- 关闭背包
function Inventory.closeBag()
    logger.info("关闭背包")
    tap(config.INVENTORY.BAG_CLOSE_COORDS[1], config.INVENTORY.BAG_CLOSE_COORDS[2])
    mSleep(config.INVENTORY.BAG_CLOSE_COORDS[3])
end

-- 整理背包
function Inventory.sortBag()
    logger.info("整理背包")
    tap(config.INVENTORY.SORT_BAG_COORDS[1], config.INVENTORY.SORT_BAG_COORDS[2])
    mSleep(config.INVENTORY.SORT_BAG_COORDS[3])
end

-- 回收装备
function Inventory.recycleEquipment()
    logger.info("回收装备")
    -- 点击回收按钮
    tap(config.INVENTORY.RECYCLE_COORDS[1], config.INVENTORY.RECYCLE_COORDS[2])
    mSleep(config.INVENTORY.RECYCLE_COORDS[3])

    -- 确认回收
    -- 这里需要根据实际游戏界面添加确认回收的坐标
    -- tap(confirm_x, confirm_y)
    -- mSleep(1000)
end

-- 检查物品是否存在
function Inventory.hasItem(itemColor, itemPattern)
    local x, y = findMultiColorInRegionFuzzy(
        itemColor,
        itemPattern,
        config.COMBAT.DETECTION_THRESHOLD,
        165, 137, 878, 593,
        { orient = 2 }
    )

    return x ~= -1
end

return Inventory